package com.texaco.chapasFutbol.entidades;

import org.andengine.engine.handler.IUpdateHandler;
import org.andengine.entity.IEntity;
import org.andengine.entity.sprite.Sprite;
import org.andengine.extension.physics.box2d.PhysicsFactory;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;

import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.texaco.chapasFutbol.R;

/**
 * Clase que implementa el objeto Pelota en el juego de futbol chapa. Contendrá
 * aquellas propiedades propias de la pelota, tales como imagen de la pelota,
 * velocidad, indice de rebote, etc.
 * 
 * @author texaco
 * 
 */
public class Pelota extends CFSprite {
	public static final String IMAGEN = "balon2.png";
	public static final int WIDTH = 44;
	public static final int HEIGHT = 44;
	
	public final static String PELOTA_USER_DATA = "soy una pelota";
	
	protected final static FixtureDef FIXTURE = PhysicsFactory
			.createFixtureDef(1f, 1f, 1f, false, CFSprite.CAT_PELOTA, CFSprite.MASK_PELOTA, (short)0);
	private Sprite sombra;

	public Pelota(int xPos, int yPos, ITextureRegion shape,
			VertexBufferObjectManager vertex, Game game, float damping) {

		super(xPos, yPos, shape, vertex, game, damping, PELOTA_USER_DATA);
		
		this.registerUpdateHandler(new PelotaUpdateHandler(game));
		this.registerUpdateHandler(new IUpdateHandler() {
			
			public void reset() {
				
			}
			
			public void onUpdate(float pSecondsElapsed) {
				Pelota.this.sombra.setPosition(Pelota.this.getX() + Pelota.this.game.getActivity().getResources().getInteger(R.integer.sombra_x_offset), 
						Pelota.this.getY() + Pelota.this.game.getActivity().getResources().getInteger(R.integer.sombra_y_offset));
			}
		});
//		this.registerUpdateHandler(new PelotaCameraChaser(game));
	}

	private class PelotaUpdateHandler implements IUpdateHandler {
		Game game;

		public PelotaUpdateHandler(Game game) {
			this.game = game;
		}

		public void onUpdate(float pSecondsElapsed) {
			if (game.getEstado().isJuegoActivo()) {
				//FIXME: CUANDO TENGAMOS PORTERÍAS CON QUE EXISTA INTERSECIÓN ES SUFICIENTE.
				if (Game.AREAS_GOL[0].contains((int) getX(), (int) getY(),
						(int) (getX() + WIDTH), (int) (getY() + HEIGHT))) {
					game.golLocal();
				} else if (Game.AREAS_GOL[1].contains((int) getX(),
						(int) getY(), (int) (getX() + WIDTH),
						(int) (getY() + HEIGHT))) {
					game.golVisitante();
				}
			}
		}

		public void reset() {
		}

	}

	public void setSombra(Sprite sombra) {
		this.sombra = sombra;
	}
	
	public IEntity getSombra(){
		return this.sombra;
	}
}
